perm filename TODO[RDG,DBL]13 blob sn#613286 filedate 1981-09-21 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00013 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002		Things yet to be done to RLL:
C00018 00003		Example of SPEC
C00020 00004		Possible Problems
C00021 00005		Quickies:
C00024 00006		Units to Rename/Add/Delete
C00025 00007		Fixes to UTIL, DAVE, RLL, AUX
C00026 00008		Fixes to CORLL
C00030 00009		Fixes to XUTIL(M)
C00031 00010		General LISP questions
C00034 00011		Fixes to Documents
C00035 00012		Possible incompatibilities of Rand-Ai / SCORE / ISIB versions
C00047 00013	[10 Sep]
C00071 ENDMK
C⊗;
	Things yet to be done to RLL:
updated [23 June 1981] [8 May 1980], [6 Apr 1980], started [8 Feb 1980]

1) Change DefaultAfterPutValue -- to consider recording changes to any of the
	nucleus units (those of RLL, SLOTS, ...) -- only if NOT caching value.
	[That external file can be used by other users to perform updates
	 to their copies of the RLL system.]

2) Get SPECS to work -- this should be like the UNITs package relation.
	Already in place: AnySpecializableSlot -- need "modes",
	and range-type specification which accepts both 5 and (*IntRange 3 7)
	for values (possibly only if "non-terminal")
  - must indicate individuals versus those "generic individuals" for simulation
	to be complete
		<<<### See Next Page ###>>>

3) MACROs still need to be implemented 
	[-- use DBL's code to understand those RESETVARS things..]

4) Figure out how to indicate some skeletal organization
	of some function, which can then get fleshed out by filling in those
	values (..outline..)  This was used, weakly, in EURISKO stuff.
   - Is this how to handle Templates? - perhaps as descriptors, ala SPILL agendae
	- so can determine new task by fleshing out such descriptor.
	only here will it call that function [in FindDefault] }
   - note one may want to override such specification, and 
	insist that such a specification be easy to perform.  (eg for an analogy)
   - examples:
Extended notion of Caching -- 
	[ie storing a value rather than recomputing it each time.]
	( Slots are but one example.)
  General spec for function:
	Look it up
	  If found: Return that value
	  If not found: Compute it
			Store it
			Return that value
  Examples: FunctionSpec
	(note it should be calculated by combining Defn, ... if ~∃ HighLevelDefn)
	    Slots for IExamples((AnyDog))
	    ? Descriptors?
Another instance:  Many tasks have
	Preliminary work -- eg type checking, authorization validation, ...
	Actual chore
	Post work -- eg ramifications

5) Fix slots of AllExamples[AnyFormat] do the right thing.
  a) [Here:	FnForDeleting, FnForSubstituting, FnForAdding, 
		FnForVerifyingAll, FnForKilling]
  - They are (I think) correct for FSet, FSingleton, FBag, FList
	and and other SlotFormats
	but not at all for those in AnyValueFormat.
	Also, many of these are inconsistent
  eg: FExecute - capable of using uUNIT and uSLOT, bound by FindDefault.
    	Will this get in trouble - ie with recursion?
	An answer: Use a new why, with (ValueFor unit slot)
 b) What goes in FormatCharacter?
	Should these be the names of units?  how should they be used, for
	things like format coersion -- and by whom (themselves?)
 c) Just what are FOneOf and FExecute?  What do they do?
	What should they do?
 d) Note Every orderedset is a set,  every set is a bag, every bag is a list.
	Furthermore, ∃ easy conversion from singleton to orderedset.
	Can this ordering be used to advantage?
	How does FListN fit into this?
	<<Needed for FormatCoercion to work correctly.>>

6) More generally -- need to figure out what sort of stuff to store in the
	various Characterization slots (eg FunctionCharacter as well)

7) What does go on the 4th element of FunctionSpec? 
	Some collection of characterization units? (see above)
	Predicate calculus specification?  
	The "semantics" (pragmatics) of this unit?

8) Many processes are now just lisp functions.  Unit-ize them.
  EG: Unit creation is a  unit list process - make it so. Give it a defn, whose
	rangetype is WhoCares!
		Using ApplyToEach ?
  - Should include: DomainType & RangeType specifications, at the very least.
	This will help in the development of various things, like
	- OptimizeCode
	   Letting each function have a slot which indicates
		how to improve it -- eg each of PROG1, PROGN, AND, OR should
		all just return their respective arg, if there is only 1.
	   Similarly LENGTH could suggest looking for embedded APPENDs, etc.
   - Macros - where each function could house who uses it.

9) Ah yes, Macros:
   Spse the function FOO calls (GetValue fred 'Slot7).
	As the GetValue macro is expanded, the value
	(Slot7 FOO) is added onto the value of ToGetValue:ValueUsedInMacro.
	Now information of ToGetValue:ToPutValue will check each time
	a unit, X, gets a new ToGetValue -- if X appears on TGV:VUIM
	(ie an ASSOC is performed), every value there is "Invalidate"d
	for ValueUsedInMacro reasons -- ie the interpretered form is read in.
	What more need I say?
	(actually that (Slot7 FOO FIE ...) be an entry on TGV:VUIM)

10) Production Rules - their formalism, and the like, needs to be resolved.
	Figure out more stuff for rules - eg store # of times tried, and success.
	More heuristics... (eg  AnyUnitCreationRule)

11) More work with HighLevelDefn 
  - so if F ≡ (SC f1 f2), then we can determine the HighLevelDefn of f1, if necessary
  - write CommonHLDefn -- HighLevelDefn should be sufficient to define a slot!
  - slot Combiners take 4-arguments  [check these 10/ix/81]
	First is list of slots,
	Second is specifications -- eg TransitiveClosureCircular, Ordered, ...
	Third is list of argnames 
	Fourth is Code? - this can be purged -- merged in with argnames..
  - FnForUpdating is now defined from the HighLevelDefn.
	Make FnForInverting and FnForCaching be as well.
	[Remember to also check general Functionals]

11.5) Types of TransitiveSCFormer:
	+-IncludeSelf, +-WellFounded, +-StrictHierarchy, +-PreserveOrder

12) Consider other ways to store values:
  a) ToCache of AllTypicalExamples  - (*Do* SeeU&S +++ AllExamples)
	on all units y s.t. y.Isa = (AnyX) [note must be a singleton.]
  b) Caching - by storing AllIsas on AnyX, and putting (FSeeU&S AnyX SuperClass*),

13) Units for special values - such as NoEntries, or RecomputeMe?
	Maybe for all global variables? (these (↑) are just "constants")

14) More general I/O-Type, which subsumes DomainType and RangeType.
	Need way to bind something in DomainType and use that value in
	RangeType.
   Related: need GrammarType (or FGrammar?) - which takes set of production
	rules, whose "terminals" are "simple" specifications...

15) [HARD] General constraint mechanism -- to state what types of things are
	needed for RLL to work (Garden of Eden),
	to use to reason about redundant values, ...

16) Use of general (quantifier) variables, to handle various complex relations.

17) Have better description of parameters now on <user>:When___ingNetwork --
	perhaps have canned values, which are mapped along; and which are
	used during queries...

18) Whole RATALE set of things for Rand

19) Slots whose values are computed for SideEffect only -- eg so the inverse
	pointer is created.  - note FunctionSpec is one of these; making
	it unnecessary to do those obnoxious CacheValues, maybe.

20) Consider MyDefinitionalSlots -- what things are necessary to define this
	unit as whatever-it-is.  This includes Isa, but probably not MyIsa...
	or does it?  Now ask what should happen if one of these slots is deleted:
	does this unit deserve to remain?
	Example of SPEC
   need Specs, Instanes, Genls, InstanceOf (← used to create new objects)
	maybe Specs*, Genls*, ...  AllSpecs? AllGenls?

Ship
  Cost: (*IRange 13 20)
  Specs: (BigShip Tanker)

Cost
  Isa: (AnySpecializableSlot)
  Role: - one of R(estricted), O(ptional), C(opy), U(nique)
		- note Unique NOT needed, as these just other slots!! -
  RangeType: (FSingleton IntegerType)
		- note this means something different here, depending on role!!
		- now can include dataranges, as well!

*IRange
  SubRange: (λ (r1 r2)  true if r1 is a subrange of r2)
  ?Verify?: (λ (...) returns function which ...)
  RangeType: (FListN IntegerType IntegerType)


BigShip
  Genls: (Ship)
  Cost: (*IRange 15 20)
  Instance: (Tanker#37 ...)

Tanker
  Genls: (Ship)
  Cost: (*IRange 14 17)
  Instance: (Tanker#37 ...)

Tanker#37
  InstanceOf: (Tanker BigShip)
  Cost:		15

	Possible Problems

QUOTE? ar still in HEURS
BACKQUOTEFN still in EURISKO
AnyCT&U in GENLINFO

AddOnCharacter - now takes another argument [NIL if single element, T if list]
McDo is still around - this may cause trouble!

MyCreatedAs still has (VirtualSlot) and (PrimSlot) - these should be updated!
	(you thought history was static!)
	Quickies:

Add on an additional field to PseudoInverses - which indicates whether we
	have a single value, or a set of them.

Have FnFor?
FirstOf -- new type of slot combiner - like McCarthy OR - when subslots
    	are disjoint.

	Extra undeclared variables
Get list of unDescr-ed units, which I'll describe

[3-May-81]

[Test out FnForUpdating of Composition and Starring - esp the P case.]

Change from Record{Put/Get} to JJF's package

Finish fixing up Slot Combiner's FnForUpdating s
	(now on P part of Composition)

[5-Feb]
1] Fix TypicalCodeGenFunction(?) 
- give it appropriate GetFNSUsed & GetCVsUsed values.

1) Finish IsParse? - used with GrammarType.

2) KRL like parser - for "a Moose with Antler = big, ..." (should be easy, using
just FNewUnit.)

	Units to Rename/Add/Delete

--Rename
NewPossibleSlots →	MyNewPossibleSlots
TypicalDataType	 →	TypicalDatatype
Exs		 →	Examples
HowToProcess	 →	LispFn
	fix Process [Args to Process -dependent on ?]

--Delete
HighLevelToCompute (subsumed by HighLevelDefn)

--Add
AnyIsa, ExistIsa, VariesWith, ...
	Fixes to UTIL, DAVE, RLL, AUX

Fix RLL-FAULTEVAL (RLL-FAULTAPPLY) to check Unitp first - avoiding the call
to Processp in those cases.  Also, in case of a single argument (eg OPK <cr>)

Default for BACKUPDIR should be "", not NIL!  ← or is this DAVE?
	Fixes to CORLL

1) ADVISE the function which does PAGE assignment -- as UP-BUMP is now only
called when the number of free cells crosses some threshold -- and currently
it is possible for page after page to be gobbled up, without triggering
this interrupt.
[Perhaps advise should be on Garbage Collector, in general?]
	↑ Steve K's looking into this.

2) Some units on UP.INCORELIST should not be -- their value cell
(returned by GETTOPVAL) is of the form
((<kbname> . <unitname>)), and not
((<kbname> . <unitname>) <sexp> . <changeflg>) -- ie it already had
been swapped out!

3) UF-SUMMARY is broken - its assumptions about names is erroneous --
this is apparent when NIL filename is passed.

4) UF-XOPEN automatically read-writes the new KB.  It should be able to
open it "virtually" -- ie nothing would be preserved externally, only
in the LISP image.  Also, it should allow NIL to be used for the KB name --
enforcing the "locality" of these units.
[see below]

∂ 1 Aug 1981 2207-PDT	GREINER		The NIL kb
To: csd.smith at SU-SCORE
cc: greiNER

Dave -
	How well integrated is the NIL kb?  There are times I want to
just dump into core the various units found on some Xfile; and do NOT 
want to go thru the space expenditure of create a regular hash file 
for this stuff.
I'd like to do a (UF-XOPEN NIL 'Fred.XKB) -- but CORLL would
squack at that.  The other possibility seems an awkward
	(UP-NOBUMP (temp)
		   (SETQ temp (UF-XOPEN 'JUNK 'Fred.XKB))
		   (CLOSEF temp)
		   (DREMOVE temp UF.NETWORKS)
		   (UF-OPEN temp 'INPUT))
which I'd really rather not do...
Comments?
	Russ
-------
∂ 5 Aug 1981 1032-PDT	<CSD.SMITH at SU-SCORE>		Re: The NIL kb
To: GREINER at RAND-AI
In-Reply-To: Your message of 1-Aug-81 2207-PDT

You'd have to modify UF-XOPEN to do the special case checking to make this work.
I suggest a corresponding change to UF-XWRITE if you so desire.  The more 
elegant way to do things is to perform the separation between file names and
in-core knowledge base names, thus allowing an arbitrary number of scratch
knowledge bases of arbitrary names.  If a KB doesn't have a read/write file
connected to it then it wouldn't be pageable.  You're welcome to make these
changes.  I'll provide a bit of guidance where necessary if you want to 
sacrifice a couple of days.
-------
                ---------------
-------

	Fixes to XUTIL(M)

Change adviCe to adviSe, for EDITF
	(If a function is broken, rebreak it after you finish editing it!)
Have AP take 2 args: the second for positioning -- just hand this 
	to the (## ...) call

Add FindInfinite to XUTIL -- to find when a function calls itself with the
	same args.

MakeFile1 needs better advice

Fix SETSYNTAX stuff - make it still do the work, only ask in case not a known
	host.

	General LISP questions

Why isn't CONN in LISPXMACROS on Rand-Ai's Lisp?  ask DEA

	Fixes to Documents

Add to DEMO:
	How to start up to on a new system
	Possible incompatibilities of Rand-Ai / SCORE / ISIB versions

[10 Sep]

0) Figure what the 3rd argument to GetValue really mean!  Esp IGNORE-VALUE,
	From, Calculating, ...  (maybe some of these should hold the value,
	to make the computation faster for ComputeWhenFilled)
	Fixes done!
[5 Aug]

Add a new PROP-PRINT - to use as extra arg to UF-SUMMARY, which prints
	out units in nice plist format.
	Should be like UA-PRINT.  Figure out how to twiddle SHOWPRINT.
   - Use the function PRINDEF - which allows me to give the left margin.

[2 Aug]
Fix up RLL-OPEN to check dates, and open the XKB file if it is more current.
Have the value of FLAGS given to BAKTRACE in BTFN at least 7.
Better, use the writing function I already wrote, which gives the actual
	arg names, and in which I can set the PRINTLEVEL...
Make all KBs not currently in use a XKB file -- so I can make other
changes to these as need arises.

  <<<SCORE is now fixed up as well!!!>>>
I put on a MyIsa on all Rand-Ai units - pointing to (AnySelfAwareUnit).
	[Note TypicalSelfAwareUnit:NewPossibleSlots includes those syntactic slots.]
  This was NOT done for the SCORE KBs.
Note that henceforth TypicalMumble:Isa include (AnyMumber); it is
	TypicalMumber:MyIsa which refers to AnyTypicalExample.
  Again, this fix made at Rand-Ai, BUT NOT AT SCORE.

[1 Aug]
(Basically for the sake of *P) AllIsas should include TypicalExampleOf 
	and have *P key off that. (Later there'll be a *P', which does
	what *P does now...)
  -- Done - sort of.  Now there is that MyIsa, which does the right
	thing for typical examples.  And AllIsas has the def'n 
	(Composition SuperClass* (Unioning Isa MyIsa))

2) Fix up each TypicalExample:
	The Isa should point to what its a TypicalExampleOf,
	and the MyIsa should refer to AnyTypicalExample (possibly with the
	self awareness.)

1) Go thru all units, adding only a SelfAwareness...

Fix CORLL - UF-CANCEL needs a CONCAT
Add on AnyItem - where AnyRationale had been

Fix DCL macro - in case there are no args, to just put (DECLARE)
Add on features to BTFN:
	(from <FN-NAME>), (to <FN-NAME>), (between <FN1> <FN2>)...
Let REEVAL macro do some error-correcting (ie if NOT a function, or not
	on stack, then walk thru stack, trying for a match... stopping
	at first one user OKs.  Note can put "$"s and friends here as well...)

IUseToComputeOf	 →	IUseDefnOf
ToComputeUsedBy	 →	DefnUsedBy
SameHLToCompute	 →	SameHLDefn
AnyArchetype	 →	AnyTypicalExample
Create a new APV for Format, which checks to see if the value is changed,
	on a cached function.  If so, consider waddling about the KBs,
	fixing formats.

[23 Jun 81]

Figure a good ratio for file size to #units - and squish to file if this
is exceeded.

6) Change function in TypicalInheritableSlot:AfterPutValue -
If the unit, U, is a typical one, then do the necessary work to find each 
yεU:TypicalExamplesOf such that y:S is now different.
Then go thru and invalidate each of these.
(Maybe first see if the invalidation is trivial,
and only do this work if necessary.)

This will be particularly necessary to ToXValue, for the macro task.

1) Fix the advice to various functions, to be something like
	ADVISE foo 'AROUND '(RESETVARS ((IgnoreFnInPUTD (CONS x IgnoreFnInPUTD))) *]

2) Make UpdateInverse just a special case of general KB updates --
	and expand that operation -- eg to go from <kb> to <kb>.STATUS,
	or ...

KBupdates is also a UnitProcess -- make it so! 
For EuriskoProcesses, DomainType can be deduced from WhatToProcess.

[5 Apr 81]
0] UpdateInverse doesn't seem to be working - at least when new units are added.

4) Change from OneOf to putting (*Do* FExectute (λ ...)) on the typical examples -
	do it for LispFn.
	Question: Can I eliminate other definitions as well, using such tricks.
Fixed

[1 Apr]
<Dave: could we have several logically distinct KBs on one file?
< ans: no, but can be simulated...
10) The way of handling functions [Processes] is NOT totally consistent. 
   Should have arglists,... Also some notion of how to check for what.
	New apply - should be: if ∃ n args, if n=1, then slot, n=2 => field,
		else just apply defn of first arg...
   Change from HowToProcess to LispFn
   Fix Processes, so its args can vary
	ie, use DomainType for each, with RangeType = "WhoCares"

 Description of KBs, at top level [logically distinct]
RLL - only the list of "stops", with essential ones extended.
USERS - list of users, and of classes of users - this KB always loaded in as well.
SLOTS - holds all the slots
LISPFNS - holds the various LISP functions used; needed to reason about ...

Not included, at least not yet:
GENLINFO - misc very high level things, which point to most of rest (basically this
	is set of units for classes.)

3) New functions, which use FocusStatus:
	DeactivateTask	[Inactive]
	SuspendTask	[Suspended]
	ActivateTask	[Queued]
	ProcessTask	[Running]  {formally ProcessTaskInstance}

[13 Mar]
5)
a] Give each KB a SubKBs slot, which holds the names of logically seperate
but essential KBs. 
b] Twiddling the StandardXUp (XεStart, Finish) functions -- in particular,
change the order of args for them, to do RECOMPILing FIRST! (while units around.)
	Fix up WhenXingOptions on TypicalUser (and all examples.)
c] Store stuff in SLOTS and USERS. (once they are subKBs.)
[12 Mar]
Also figure how to use values.   [Eg does L-AND work here, or not? - Yes]
Get rid of Agenda, fix Spill,
4) Revert back from AnyRuleSpecFn to slot. Change Conjoining to ListOfParts
(that is, executable parts).  Fix IfParts, ThenParts to use this, NOT MySlots.

Units for Known, Unknown, LeaveForLater (in HEURS) - these used in Rules
	{Winding thru Spill Rules (R-Backtrack)}

9. Make sure each slot has a MakesSenseFor 
	- and improve final function to	confirm that for each...

13. Class of temporary units - eg instances of AnyFocusInstance - to be deleted
	(along with virtual slots) when KB is closed.
---------
[5 Feb]

?????
0. BIG CHANGE: The UNIT should know about the accessing, not the slot! Hence,
	associate with each KB (or unit?) the name of the accessing types -
	so change GetValue to RLLGetValue, and stick (Get . RLLGetValue) on each
	of current KBs (similiarly with Put, Add, ...)
	Note: to emulate Units, just put UA-GETVALUE there...

    In this way, we can solve Genesereth's & R H-R's complaints, ...
	and allow various schemes
	for indexing.
?????
	- Status: This sorta goes away... -

TypicalVirtualSlot → TypicalComputableSlot
TypicalPrimSlot	 →	TypicalPrimitiveSlot
ToInitialize	 →	ToInitializeValue ← InitializeSlot
ToCache		 →	ToCacheValue	← CacheValue

Delete AnyCT&U, AnyAT&U, TypicalCT&U, TypicalAT&U - they are unnecessary!
(as really just dealing with composition).

2) Finish up various facts about SlotCombiners.
Esp. FnFor?ing, which replaces UsingSlotCombiners, ...
	- Status: this should be done now ... still unchecked -

3) New KB - LISPFN - this will house my description of various things which are
now lisp functions, especially
GetValue, ...
MapUnit, ...  [note this MAY require fixing I/OTypes - as union of ...]
DefaultGetValue, ...
	- Status: Still may need I/OTypes, but pushed this. -

6) Fix up OrderedPrototypes to be more efficient - so renames slot from Prototypes
to OrderedPrototpes, and note that defn of Prototypes can use that: in its defn.
Or just make Prototypes never-cached! (as OrderedPrototypes had been.)
	- Status: Done as described -

7) Figure out what to pass along to DefaultAfterPutValue - perhaps it should
be a history list, or the form ( ... (Slot1 Unit1 Add) (Slot0 Unit0 NewVal) ... ).
Maybe not.   Newer things toward the front.  This should subsume the hassle
now done for FunctionSpec.

Should this only be done for circular things? That is, cases like RangeType?
(so flag, associated with each slot, set to do these things.)
	- Status: Ad hoc things passed (and checked for), as necessary -

[17 Dec]
 add on RangeInterpreter for UnrestrictedType
10) Find why specifying RangeType (when Format was NIL) erased both.
Some loop there.

11) Make AnyDatatype ⊂ AnyUnaryPredicate, and change slot names appropriately
Is Format ⊂ AnyCodeAl? No - but it is similar....

12) Use LASTPOS for REEVAL's starting position, rather than NIL.

13) Make sure each format's FnForXXXing returns its last argument (which is
now the modif) if successful. Hence forth that will be used!
(When verified that this works, change each DefaultXXXValue function, removing
the check.

14) Decide if ADDTOVAR works, or if this gets stuck on MARKEDASCHANGED...

15) On BQ* macro, fix so only (PROG ((g0012 (CAR sss)) ...) (RETURN (...)), rather
than use those SETQs

10. Use result of DefaultBeforePutValue - and make sure the verifiers return
    	such [this is modify...]
	Things done

16. Need a WhenFilled (Defn like IfNeeded) 
	[perhaps a ComputeWhenFilled, listing slots to be fixed up]
- this pushes some values along
	when a new value has been enterred...
	[This can do (1) recomputing Essential slots, and (2) determining value
	of slot X when slot Y has been changed.]
  Use this to rid self of FunctionSpec monstronsity, by always pushing values into
	slots, in all three cases. [Use CacheValue for one not explicitly requested,
	with why value explaining this.]
  Another solution: 
	FunctionSpec, when called, automatically caches Defn, DomainType and
	RangeType. So these slots don't both caching -- ie ∃ new slot,
	ToCacheValueFromElsewhere, which FunctionSpec calls.
	Note  Defn:ToCacheValue is AlreadyCached (which ≡ NoOp)
     (Should the slot-combiner know about this? How? 
	? (DoAlready (ApplyingFn CAR HighLevelDefn)) ?

[29 Nov]
Each of these - *P, OneOfThese, Predicate, ... should be units.
3) Use BACKQUOTE to advantage, to make more readible code

Rename from HLDefnParser to HLDefnExpander (and for Type)
	- fix FunctionSpec & VerifyArgs/VerifyValue
Defn of FunctionSpec - GetAccessFn => GetValue for last chance
	(worry of infinite loops...)

[21 Nov]
 Fast flag to UU-DIAGNOSE
 QUOTE?# => QUOTE? => BACKQUOTE
 UF-CANCELNETWORK takes a list
 UF-OPENNETWORK & UF-CLOSENETWORK  -- 2nd arg is fn to be executed
	[NIL defaults to earlier; T does nothing]
	-- 3rd arg : T means ReadOnly
   -- rewrite own UP-OPENNETWORK -

Twiddle AFTERSYSOUTFORMS, BEFORESYSOUTFORMS

Finally thought of them:
	Arg to pass to OverallStartUp, and WhenClosing - so not just name,
	put 2nd value, which that function can use.
	(This ?th argument to UF-OPENNETWORK/UF-WRITENETWORK)

[14 Sept]
1b) RELATED: ToInvalidate - associated with each slot, indicated what to do
	when this value is no longer relevant.

14. IgnoreCached - if given to GetValue, does not do UA-GETVALUE, just uses Defn
	to recompute it. Note: old value should be passed to CacheValue - this
	had always been NIL before.

[9 Sept 1980]

PrimSlot	 →	AnyPrimSlot	← RemoveVirtualSlots
VirtualSlot	 →	AnyComputableSlot  ← RemoveVirtualSlots
$SELF$Slot	 →	Any$SELF$Slot
Examples	 →	UnitExamples

13. Make unit initialization faster 
	- cache slots, ... on inheritance.

0) Now (4 July) doing:
	AnyUser - see #5

0.5) ReadOnly Mode -- set UP.BUMP? to NIL 
	LOGOUT's advise - to see if any put units since last SYSOUT, or
	OpenNetwork (if UF.NETWORKS non-NIL)
  [When logging out, ask user -- even if ReadOnly...?]
 Store who has used this core image.

2) UnionDT, and IntersectDT - need to deal with cases when types are
	different (eg FunctionType & SlotType [transform SlotType into
	(FunctionType (?DomainType? UnitType...))

5) AnyUser, in RLL. - here we store which KBs this user will want. In START,
	single question: "Your usual?". If Y, these loaded in.
	Else gets list, with questions. (May decide these are to be his default, or
	not.) Also, his "profile" indicates answers to the questions.
	Store with each KB whether or not it was Disconnected (and from whom.)
	If not, why even ask to reconnect?
  When he creates a new KB, this added to his list.

[4 July 1980]
ActionPartOfRule →	AnyActionPartOfRule
IfPartOfRule	 →	AnyIfPartOfRule
ThenPartOfRule	 →	AnyThenPartOfRule

1. Fix EDITU so second arg given to PutValue -- so may verify or not...

2. (QUOTE?# '(LAMBDA (*1) (PROG ?1 *2))
	    '((G0035)) 
	    '((unit slot) 
		((* this list is bound to *2) (UA-MAPSLOTS unit 'WRITELNTTY))))
  returns
   (LAMBDA (unit slot) 
	(PROG (G0035) 
	      (* this list is bound to *2)
	      (UA-MAPSLOTS unit 'WRITELNTTY)))
	That is, QUOTE?1 takes three arguments:
	#1: a list, in which substitutions will be made,
	#2: a list, whose i-th element is the value for ?i [here ?1 is (G0035)]
	#3: a list, whose i-th element is the value for *i [here *1 is (unit slot)]

[8 May 1980]
1. Ramifications of Altering a slot's value -- eg
	(i) IF x.S* is changed, THEN ∀ y ε x.(S-1)*, y.S* is invalid
	    [IF S = T ∪ V, & something is added to x.T
		THEN x.S should have that value aded as well - if format is ...]
	(ii) IF OrderedX is built from X by some ordering - ie is redundant-but
		ordered of X - then when U.X is modified by Adding, or Renaming,
		X should be removed from U.SlotsNowOrdered.

5. DomainType, RangeType
	ValuesInvalidated - defined from HighLevel, as should Format, Datatypes

    1) Make sure VerifyAll is doing the correct thing. Also pass unit and slot name
    	to it. (Fix it up for rest of ValueFormats.)
    	Delete now worthless FnForVerifyingAll and -- List.
*   2) MyKB is AnyUnitFunction - make it so.
    5) Args to HLDefnParser should be (name (RangeType) ...) 
    	(note: delete HLVerify - now RangeType.)
    Define DomainTpe, RangeType
    	[Note: need only FnForAdding - 1, List, 1st - come from why part.

 Units renamed.
FnForRenaming1	 →	FnForSubstituting1
ToRenameValue	 →	ToSubstValue	← ↓
[DefaultRenameValue → DefaultSubstValue - this a function]
SubSetDT	 →	SubDT
SuperSetDT	 →	SuperDT
SlotsNowOrdered	 →	MySlotsNowOrdered
EssentialVirtualSlots	 →	MyEssentialVirtualSlots
DependantNetworks →	DependentNetworks  ← GetKBs
ISpecs		 →	ISubClass
PossibleSlotsOfISpecs →	PossibleSlotsOfISubClass
ActionType	 →	FunctionType

 Fix HLDefn.Defn (or ToInit..) - SortSlots => PutInOrder
 CreateSlot - descends from VirtualSlot, not AnySlot
 Fn for computing ToParseParts-like thing, so TPP can be eliminated
 Format & Datatype - should descend from RangeType, softly (not FunctionSpec)
 Names selected - need loops 
	λ(x) (McDo .. (NOT (Unitp (RPLACA (SETQ ...(EXPLODE (GETSYM))  
	[in CreateU4S,CreateSlot. ...]
 Ask user if he wishes to create a new slot - 
	[do we want to merge all things invalidated into one? 
	[  No! Later we might want to do other things, than just invalidate]
	If not, just pass HLDefnParser( highleveldefn ) along - use GetGetVal,
	and the like...
	 - so either PSUEDO-slot or REAL-slot
 If the "why" to the Invalidate function included "DoInverses", pass this along to
	AfterPutValue, so it will actually remove this and that!